home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 344_01 / env.c < prev    next >
C/C++ Source or Header  |  1990-04-17  |  4KB  |  124 lines

  1. /*     wmcenv.c (c) 1989 Bryan R Leipper
  2.  
  3. SYNOPSIS:    print envelopes in HP LJ II from address list file
  4. DESCRIPTION:
  5.     reads a file of addresses separated by a line of @@@ and
  6.     prints and envelope for each.
  7. RETURNS: not implemented.
  8. CAVEATS: MSC 5.1 and MSDOS: watch for file permissions
  9.     needs eof check for last entry to avoid need for @@@ line
  10.     on last address.
  11. FILES: input, output, stdprn
  12. NOTES:
  13. SEE ALSO:
  14. HISTORY:    adapted from env.c 2/24/90.
  15.     19 April 1990 - cleanup
  16. REGISTRATION:
  17.     Bryan R Leipper, 714 Terra Ct, Reno NV 89506
  18.  
  19. */
  20. /* =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= */
  21. #include <brl/standard.h>            /* local machine and app specific */
  22.  
  23. #include <stdlib.h>
  24. #include <stddef.h>
  25. #include <stdio.h>
  26. #include <fcntl.h>
  27. #include <io.h>
  28.  
  29. /* -----------------------------------------------------------------------
  30. ;       EQUATES  for Envelope Margins - Note Bytes reversed
  31. ;-----------------------------------------------------------------------
  32. LMARG_ADD_S     EQU     "06"            ; Left Address Margin - Small
  33. LMARG_RET_S     EQU     "54"            ; Left Return Margin - Small
  34. LMARG_ADD_L     EQU     "05"            ; Left Address Margin - Large
  35. LMARG_RET_L     EQU     "71"            ; Left Return Margin - Large
  36. TMARG_RET_S     EQU     "03"            ; Top Return Margin - Small
  37. TMARG_RET_L     EQU     "92"            ; Top Return Margin - Large
  38. TMARG_RET_2     EQU     "61"            ; Top Return Margin - Series 2
  39. ;-----------------------------------------------------------------------
  40. ; Laser Jet Command Sequences
  41. ;-----------------------------------------------------------------------
  42. */
  43. #define ESCAPE    27
  44. static BYTE RESET_LJ[] = {ESCAPE,"E"};        /* reset printer */
  45. static BYTE ENVSIZE[] = {ESCAPE,"&l81A"};    /*  select #10 envelope size */
  46. static BYTE LNDSCP[] = {ESCAPE,"&l1O"};        /* landscape */
  47. static BYTE ROMAN8[] =    {ESCAPE,"(8U"};        /* Roman-8 symbol set */
  48. static BYTE COURIER[] = {ESCAPE,"(sp10h12vsb3T"};    
  49.             /* 10-pitch  12-point upright  med-weight  Courier */
  50. static BYTE ENVFEED[] =    {ESCAPE,"&l2H"};    /* envelope tray feed */
  51. static BYTE EJECT[] =    {ESCAPE,"&l0H"};    /* eject sheet */
  52. static BYTE TRAFEED[] =    {ESCAPE,"&l1H"};    /* tray feed */
  53. static BYTE MANFEED[] =    {ESCAPE,"&l2H"};    /* manual feed */
  54. static BYTE TOP_MARGIN[] = {ESCAPE,"&l1E"};
  55. static BYTE RTRN_MARGIN[] = {ESCAPE,"&a2l1R\r"};
  56.             /* rtrn addrs at row 1 col 2  */
  57. static BYTE ADRS_MARGIN[] = {ESCAPE,"&a55l11R\r"};
  58.             /* address at col 55 row 11 (\r is <CR> to assure proper pos) */
  59. static BYTE CRLF[] = {13, 10, 0};
  60. static BYTE delimstr[] = {"@@"};    /* signifies end of an address */
  61.  
  62.  
  63. /* =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= */
  64. static BYTE *rtn_adrs[] = { "Bryan R Leipper"
  65.             ,    "714 Terra Court"
  66.             ,    "Reno, NV 89506"
  67.             ,    ""};
  68.  
  69. /* =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= =-=-= */
  70. main (int argc, char *argv[]) { /*
  71. */ 
  72.  
  73.     FILE *ifd;
  74.     BYTE adrs[6][80];    /* max address size 6 lines by 80 char! */
  75.     SHORT flag, cnt, i, j;
  76.  
  77.     if (argc < 2) {
  78.         printf("\nusage: env infile [outfile] ");
  79.         exit(-1);
  80.     }
  81.  
  82.     if ((ifd = fopen(argv[1],"rt")) == NULL) {
  83.         printf("\ncannot open input file %s",argv[1]);
  84.         exit(-1);
  85.     }
  86.     if (argc > 2) {
  87.         if (freopen(argv[2],"wt", stdprn) == NULL) {
  88.             printf("\ncannot open output file %s",argv[2]);
  89.             exit(-1);
  90.         }
  91.     } else
  92.         setmode(fileno(stdprn), O_TEXT);
  93.  
  94.     fprintf(stdprn, "%s", RESET_LJ);
  95.     fprintf(stdprn, "%s", ENVSIZE);
  96.     fprintf(stdprn, "%s", LNDSCP);
  97.     fprintf(stdprn, "%s", COURIER);
  98.     fprintf(stdprn, "%s", ENVFEED);
  99.     fprintf(stdprn, "%s", TOP_MARGIN);
  100.     flag = TRUE;
  101.     cnt = 0;
  102.     j = 0;        /* address line counter */
  103.     while (fgets(adrs[j], 80, ifd)) {
  104.         if ((strlen(adrs[j]) > 1) && (adrs[j][0] > 32)) {
  105.             if (strstr(adrs[j], delimstr) == NULL) {
  106.                 if (j < 6) ++j;
  107.             } else {
  108.                 printf("%d. %s\n", ++cnt, adrs[0]);
  109.                 fprintf(stdprn, "%s", RTRN_MARGIN);
  110.     for (i=0; rtn_adrs[i][0]; fprintf(stdprn, "%s\n", rtn_adrs[i++]));
  111.                 fprintf(stdprn, "%s", ADRS_MARGIN);
  112.     for (i=0; i<j; fprintf(stdprn, "%s", adrs[i++]));
  113.                 fprintf(stdprn, "%s", EJECT);
  114.                 j = 0;
  115.             }
  116.         }
  117.     } ;
  118.  
  119.     fprintf(stdprn, "%s", RESET_LJ);
  120.  
  121.     printf("printed %d envelopes\n", cnt);
  122.  
  123. }
  124.